/**
 * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
 *
 * Created by: yuanguozheng
 * Created: 2015年4月17日 下午6:41:54
 */
package com.coderyuan.file;

import android.text.TextUtils;
import android.webkit.MimeTypeMap;

import com.coderyuan.stream.StreamUtil;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

/**
 * 文件工具类
 *
 * @author yuanguozheng
 */
public class FileUtil {

    /**
     * Delete file if exist path
     * 
     * @param path the path
     * @return true if this file was deleted, false otherwise.
     */
    public static boolean deleteFileIfExist(String path) {
        if (TextUtils.isEmpty(path)) {
            return false;
        }
        File file = new File(path);
        if (file.exists()) {
            return file.delete();
        }
        return false;
    }

    /**
     * Delete file if exist file
     * 
     * @param file the file
     * @return true if this file was deleted, false otherwise.
     */
    public static boolean deleteFileIfExist(File file) {
        if (file == null) {
            return false;
        }
        if (file.exists()) {
            return file.delete();
        }
        return false;
    }

    public static FileOutputStream openNewFileOutput(File file) throws IOException {
        deleteFileIfExist(file);
        ensureParent(file);
        file.createNewFile();
        return new FileOutputStream(file);
    }

    /**
     * 写入文本到文件
     *
     * @param file，文件
     * @param text，要写入的文本
     * @param append，是否为追加模式
     * @return 是否写入成功
     */
    public static boolean writeToFile(File file, String text, boolean append) {
        if ((file == null) || TextUtils.isEmpty(text)) {
            return false;
        }
        if (!ensureParent(file)) {
            return false;
        }
        OutputStreamWriter writer = null;
        try {
            writer = new OutputStreamWriter(new FileOutputStream(file, append));
            writer.write(text);
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        } finally {
            StreamUtil.closeQuietly(writer);
        }
        return true;
    }

    /**
     * 保证文件父目录存在
     *
     * @param file，文件
     */
    public static boolean ensureParent(final File file) {
        if (null != file) {
            final File parentFile = file.getParentFile();
            if ((null != parentFile) && !parentFile.exists()) {
                parentFile.mkdirs();
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * 获得去除扩展名后的文件名
     *
     * @param fileName，原始文件名
     * @return 无扩展名的文件名，无文件名返回null
     */
    public static String getFileNameWithoutExtension(String fileName) {
        if (TextUtils.isEmpty(fileName)) {
            return null;
        }
        String name = fileName;
        int index = fileName.lastIndexOf('.');
        if (index != -1) {
            name = fileName.substring(0, index);
        }
        return name;
    }

    /**
     * 获得扩展名
     *
     * @param 文件名
     * @return 扩展名（不含.），无扩展名返回null
     */
    public static String getExt(String fileName) {
        if (TextUtils.isEmpty(fileName)) {
            return null;
        }
        int index = fileName.lastIndexOf(".");
        return index == -1 ? null : fileName.substring(index + 1);
    }

    /**
     * 用文件名获得MIME
     *
     * @param 文件名
     * @return MIME，无文件名返回null
     */
    public static String getMimeByName(String name) {
        if (TextUtils.isEmpty(name)) {
            return null;
        }
        String ext = getExt(name);
        return MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext);
    }

    /**
     * 用扩展名获得MIME
     *
     * @param 扩展名
     * @return MIME，无扩展名返回null
     */
    public static String getMimeByExt(String ext) {
        return TextUtils.isEmpty(ext) ? null : MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext);
    }

    /**
     * 删除文件
     *
     * @param 要删除的文件
     * @return 是否成功
     */
    public static boolean del(File file) {
        if (file == null) {
            return false;
        }
        return file.exists() ? file.delete() : false;
    }
}
